Don't leak a ref to the settings
authorWilliam Jon McCann <jmccann@redhat.com>
Wed, 12 Sep 2012 13:08:28 +0000 (09:08 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 17 Sep 2012 00:21:06 +0000 (20:21 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=683896

gtk/gtktoolbar.c
gtk/gtktoolitemgroup.c
gtk/gtktoolpalette.c

index 69fd2b3e5184d45a08b9242310e1a13201cb8daf..e184c067f2ff8016410bf76bd30501194be9578a 100644 (file)
@@ -2091,7 +2091,7 @@ gtk_toolbar_screen_changed (GtkWidget *widget,
   if (old_settings)
     {
       g_signal_handler_disconnect (old_settings, priv->settings_connection);
-
+      priv->settings_connection = 0;
       g_object_unref (old_settings);
     }
 
@@ -3122,6 +3122,14 @@ gtk_toolbar_dispose (GObject *object)
       priv->menu = NULL;
     }
 
+  if (priv->settings_connection > 0)
+    {
+      g_signal_handler_disconnect (priv->settings, priv->settings_connection);
+      priv->settings_connection = 0;
+    }
+
+  g_clear_object (&priv->settings);
+
  G_OBJECT_CLASS (gtk_toolbar_parent_class)->dispose (object);
 }
 
index b61e1a13ea75886ce0b8e43484f5d5440d3c6078..5907bf4aa7cddb5a55d6636b8a8075e68271b5aa 100644 (file)
@@ -229,6 +229,7 @@ gtk_tool_item_group_screen_changed (GtkWidget *widget,
   if (old_settings)
   {
     g_signal_handler_disconnect (old_settings, priv->settings_connection);
+    priv->settings_connection = 0;
     g_object_unref (old_settings);
   }
 
@@ -519,6 +520,14 @@ gtk_tool_item_group_dispose (GObject *object)
       priv->toplevel = NULL;
     }
 
+  if (priv->settings_connection > 0)
+    {
+      g_signal_handler_disconnect (priv->settings, priv->settings_connection);
+      priv->settings_connection = 0;
+    }
+
+  g_clear_object (&priv->settings);
+
   G_OBJECT_CLASS (gtk_tool_item_group_parent_class)->dispose (object);
 }
 
index 9d8cd0499670a2e1645fab57700566aebe03d80b..1503276a6b727e4378dd6c00ee474267df66f89c 100644 (file)
@@ -383,6 +383,14 @@ gtk_tool_palette_dispose (GObject *object)
       palette->priv->text_size_group = NULL;
     }
 
+  if (palette->priv->settings_connection > 0)
+    {
+      g_signal_handler_disconnect (palette->priv->settings, palette->priv->settings_connection);
+      palette->priv->settings_connection = 0;
+    }
+
+  g_clear_object (&palette->priv->settings);
+
   G_OBJECT_CLASS (gtk_tool_palette_parent_class)->dispose (object);
 }
 
@@ -932,6 +940,7 @@ gtk_tool_palette_screen_changed (GtkWidget *widget,
   if (old_settings)
   {
     g_signal_handler_disconnect (old_settings, priv->settings_connection);
+    priv->settings_connection = 0;
     g_object_unref (old_settings);
   }